#include <iostream>

using std::cout;
using std::endl;

class A
{
public:
    A()
    {
        cout << "A()" << endl;
    }

    void print() const
    {
        cout << "void A::print() const" << endl;
    }

    ~A()
    {
        cout << "~A()" << endl;
    }
};

class B
{
public:
    B()
    {
        cout << "B()" << endl;
    }

    void print() const
    {
        cout << "void B::print() const" << endl;
    }

    ~B()
    {
        cout << "~B()" << endl;
    }
};

class C
{
public:
    C()
    {
        cout << "C()" << endl;
    }

    void print() const
    {
        cout << "void C::print() const" << endl;
    }

    ~C()
    {
        cout << "~C()" << endl;
    }
};

//多继承的时候，对于每一个基类的前面都要写继承方式，如果不写
//那么默认会采用私有继承
//
//对于多继承而言，基类构造函数的调用顺序至于派生类在继承的时候
//基类的继承顺序有关，与其在派生类的构造函数的初始化列表中的顺序
//是没有关系的
class D
: public A
, public B
, public C
{
public:
    D()
    {
        cout << "D()" << endl;
    }

    ~D()
    {
        cout << "~D()" << endl;
    }
};

int main(int argc, char *argv[])
{
    //多继承情况是，成员函数访问冲突？
    //解决：使用类名 + 作用域限定符的形式
    D d;
    d.A::print();
    d.B::print();
    d.C::print();
    return 0;
}

